package utils

import (
	"os"
	"path/filepath"
	"strings"
)

// WalkFiles 遍历目录内文件名后缀的指定文件列表
func WalkFiles(rootDir string, suffix string) ([]string, error) {
	var files []string
	err := filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		filename := info.Name()
		if !info.IsDir() && filepath.Ext(filename) == suffix && !strings.HasPrefix(filename, "~$") {
			files = append(files, path)
		}
		return nil
	})
	if err != nil {
		return nil, err
	}
	return files, nil
}

// CheckAndInitDirectory 检查并初始化目录
func CheckAndInitDirectory(path string) error {
	if _, err := os.Stat(path); os.IsNotExist(err) {
		err = os.MkdirAll(path, os.ModePerm)
		if err != nil {
			return err
		}
	}
	return nil
}

// ClearDirectory 清空目录
func ClearDirectory(path string) error {
	if _, err := os.Stat(path); os.IsNotExist(err) {
		return nil
	}
	return os.RemoveAll(path)
}

// WriteToFile 将数据写入文件
func WriteToFile(file string, data []byte) error {
	err := CheckAndInitDirectory(filepath.Dir(file))
	if err != nil {
		return err
	}
	f, err := os.OpenFile(file, os.O_CREATE|os.O_TRUNC, 0644)
	if err != nil {
		return err
	}
	defer func(f *os.File) {
		err := f.Close()
		if err != nil {
			return
		}
	}(f)
	_, err = f.Write(data)
	if err != nil {
		return err
	}
	return nil
}

// PathToBaseName 获取路径的文件名
func PathToBaseName(path string) string {
	f := filepath.Base(path)
	return strings.TrimSuffix(f, filepath.Ext(f))
}
